package com.springMVCStudy.error;


import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

// 全局异常发生，会走此类的handler（我们controller里的方法就叫handler，这个类写的也是handler）

// @ControllerAdvice，加上后可走逻辑视图，转发和重定向的
@ControllerAdvice
// @RestControllerAdvice，加上后可直接返回json字符串
@RestController
public class GlobalExceptionHandler {

    /*
    发生异常 -> ControllerAdvice注解的类型 -> @ExceptionHandler（指定的异常） -> handler
    指定的异常可以精准查找也可以查找父异常，没找到就找父异常。
    在UserController中写了一个handler有空指针异常，但是我们这个类里没有定义对应类型的异常处理。
    而我们又定义了该类型的父异常Exception处理，那么就使用父异常的处理。
     */

    @ExceptionHandler(ArithmeticException.class)
    public Object ArithmeticExceptionHandler(ArithmeticException e){
        // 自定义处理异常
        String msg = e.getMessage();
        System.out.println("message = " + msg);

        return msg;
    }

    @ExceptionHandler(Exception.class)
    public Object ExceptionHandler(Exception e){
        // 自定义处理异常
        String msg = e.getMessage();
        System.out.println("message = " + msg);
        return msg;
    }

}
